package meterMonitor.mapper;

import meterMonitor.dto.QueryByIdsDto;
import meterMonitor.model.Meter;
import meterMonitor.vo.MeterInfoShort;
import meterMonitor.vo.MeterStatistics;
import meterMonitor.vo.MeterUpdatesVO;
import meterMonitor.vo.QueryForChartRequest;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 计量器
 */
public interface MeterMapper {

    //添加设备
    void add(Meter meter);

    //添加设备
    List<Meter> queryMeterByMeterCode(@Param(value = "meterCode") String meterCode);
    // 修改
    void update(Meter meter);
    //根据设备编码删除
    int deleteByPrimaryKey(long meterCode);

    //查询所有符合条件的水表设备
    List<Meter> queryMeterWater(Meter meter);


    List<Meter> queryMeter(Meter meter);

    //yy:根据设备类型查出所有设备
    List<Meter> queryMeterByDevice(int deviceTypeCode);

    //根据类型查出水表或者是电表
    List<Meter> queryMeterByType(Meter meter,@Param(value = "type") int type);


    //查询所有符合条件的电表设备
    List<Meter> queryElectricityMeter(Meter meter);

    //查询所有在线(水电表)设备
    List<Meter> queryAllMeter();

    //查询所有水表)设备
    List<Meter> queryAllMeter1();

    //查询所有在线设备分类型
    List<Meter> queryAllMeterByDeviceWithStatus(@Param(value = "deviceTypeCode") int deviceTypeCode);

    //yy:查询所有设备
    List<Meter> queryAllMeterNoStatus(int deviceTypeCode);

    //yy：根据类型查询所有设备
    List<Meter> queryAllMeterByDevice(@Param(value = "deviceTypeCode") int deviceTypeCode);

    //yy：查询所有(水表)设备
    List<Meter> queryAllMeterWater();



    //yy：查询所有电表设备
    List<Meter> queryAllMeterElectricity();

    //根据网关id查询
    List<Meter> queryByGatewayId(long gatewayId);


    //根据仪器类型查出对应的编号
    List<Meter> queryMeterCode(@Param("deviceTypCode") int deviceTypCode );
    //根据区域id查询
    List<Meter> queryByAreaId(@Param("areaId") String areaId);
    //统计白班标准值
    Double sumStandard();
    //统计电表标准值
    Double sumStandardElectricity();
    //根据读表器编码查询
    Meter queryByReaderCode(String readerCode);
    //根据设备名称查询
    Meter queryByDeviceName(String deviceName);
    //
    int insertSelective(Meter record);
    //根据pkid查询
    Meter selectByPrimaryKey(Long pkid);
    //修改
    int updateByPrimaryKeySelective(Meter record);

    int updateByPrimaryKey(Meter record);
    //批量修改
    void updateAll(MeterUpdatesVO meterUpdatesVO);
    //查询所有设备简短信息
    List<MeterInfoShort> queryMetersInfoShort();
    /**
     * 图表-查询标准值
     *
     * @param requestMod
     * @return
     */
    Meter queryStandardForCharts(QueryForChartRequest requestMod);
    //根据id查询设备
    List<Meter> queryMeterByIds(QueryByIdsDto mod);
    void updateByDeviceNameSelective(Meter meter);
    void updateByAnotherNameSelective(Meter meter);
    List<String> selectDeviceNames(Meter meter);
    List<String> selectUnUsedReaders();
    List<String> getAnotherNameByDeviceName(String deviceName);
    /**
     * 查询本周用量
     * @return
     */
    List<MeterStatistics> selectWeek();

    //查出离线仪器的时间
    List<Meter>queryTimeByOffline(@Param("meterCode") Long meterCode);

    //查出超标仪器的时间
    List<Meter>queryTimeByExcessive(@Param("meterCode") Long meterCode);
    /**
     * 查询月周用量
     *
     * @return
     */
    List<MeterStatistics> selectMonth();

    List<MeterInfoShort> queryMetersInfoByArea(Integer areaId);

    List<MeterStatistics> selectWeekYesterday(@Param(value = "fromTime") String fromTime, @Param(value = "toTime") String toTime);

    List<MeterStatistics> selectMonthMon(@Param(value = "fastday") String fastday,
                                         @Param(value = "lastday") String lastday);
}
